package com.mastercard.assets.web.struts.actions;

import com.mastercard.assets.jpa.TblAsset;
import com.mastercard.assets.jpa.TblAssetPaisRegional;
import com.mastercard.assets.jpa.TblPaises;
import com.mastercard.assets.jpa.TblPaquete;
import com.mastercard.assets.jpa.TblPaqueteRegional;
import com.mastercard.assets.notifications.NotificationUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.AssetAsignarPaquetesRegionalForm;
import com.mastercard.assets.web.util.to.UserLogin;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class AssetsAsignacionPaquetesRegionalRegistrar 
        extends
                Action
{
    
    public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
    {
        HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		int roleId = user.getActualRoleId( ) ;
                
                // en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
                
                try
                {
                    AssetAsignarPaquetesRegionalForm f = ( AssetAsignarPaquetesRegionalForm ) form ;
                    
                    int operacion = f.getOperation( ) ;
                    
                    if( operacion == 1 ) {
                            
                    int[] cvePaisS = f.getCvePaisS( ) ;
                    String[] nombrePaisS = f.getNombrePaisS( )  ;
                    int[] paquetesAsignadosS = f.getPaquetesAsignadosS( ) ;    
                    int[] manejarPaquetesS = f.getManejarPaquetesS( ) ;

                    int[] cvePaisD = f.getCvePaisD( ) ;
                    String[] nombrePaisD = f.getNombrePaisD( ) ;
                    int[] paquetesAsignadosD = f.getPaquetesAsignadosD( ) ;
                    int[] manejarPaquetesD = f.getManejarPaquetesD( ) ;
                    
                    TblAsset assetRegional = MasterCardDAO.findAssetById( f.getCveAsset( ) ) ,
                            assetPais = new TblAsset( ) ;
                    MasterCardDAO.closeEntityManager( ) ;
                    
                    SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd") ;
                    // variables para fechas
                    String FecEntregaBc="", FecAprobBc="", FecLimiteSolCot="", FecLimReqCompra="", FecLimSubeCont="",
                            FecLimPrimFact="", FecConfSede="", FecFinCamp="", FecLimSegFact="", FecLimAgenda="",
                            FecLimGanadores="", FecLimBoletos="", FecSalida="", FecRegreso="", FecEva="" , Fecha="" ;
                    
                    
                    // Busca EL O LOS REGISTROS EN LA TABLA DE RELACION DE ASSETREGIONAL-ASSETPAIS POR ID DE ASSETREGIONAL
                    List< TblAssetPaisRegional > tblAssetPaisRegional = MasterCardDAO.getLista( f.getCveAsset( ) ) ;
                    MasterCardDAO.closeEntityManager( ) ;                    
                    if( manejarPaquetesS != null ){
                    // rrecorre los arreglos para paquetes sencillos
                    for( int i = 0 ; i < cvePaisS.length ; i++ ) {
                        
                        // SI LA VARIABLE manejarPaquetesS EN LA POSICION i ES MAYOR QUE CERO, APLICA EL PROCESO PARA ASIGNAR PAQUETES
                        if( manejarPaquetesS[ i ] > 0  ) {
                        
                        if( !tblAssetPaisRegional.isEmpty( )  ) {
                            
                            int bandera = 0 ; // BANDERA PARA SABER SI YA EXSTE UN ASSET PARA EL PAIS
                            //BARRE TODOS LOS REGISTROS DE LA RELACION DE ASSETREGIONAL CON ASSETPAIS
                            for( TblAssetPaisRegional APR : tblAssetPaisRegional ) {    
                                
                                // SI ENCUENTRA EL REGISTRO y ESTA ACTIVO CAMBIA LA BANDERA Y TOMA EL ASSET
                                TblAsset assetPaisRelacionS = MasterCardDAO.findAssetById( APR.getIdAssetPais( ) ) ;
                                if ( assetPaisRelacionS.getStatus( ) == 0 )
                                    continue ;
                                
                                if( assetPaisRelacionS.getTblPais( ).getCvePais( ) == cvePaisS[ i ] ){
                                    assetPais = MasterCardDAO.findAssetById( APR.getIdAssetPais() ) ;
                                    bandera = 1 ;
                                }
                                    
                            }
                            
                            if( bandera == 0 ) {
                                //EN CASO DE NO ENCONTRAR EL REGISTRO
                                // CREA EL ASSET
                                
                                assetPais = MasterCardDAO.addNewAssetByRegional(assetRegional.getTblSubcateg( ).getCveSubcateg( ), assetRegional.getNombre( ), null,
                                    assetRegional.getCostoSenLoc( ), assetRegional.getCostoDobLoc( ), assetRegional.getCostoSenReg( ), assetRegional.getCostoDobReg( ), Fecha = formato.format( assetRegional.getFecha( ) ),
                                    FecEntregaBc = formato.format( assetRegional.getFecEntregaBc( ) ) , FecAprobBc = formato.format( assetRegional.getFecAprobBc( ) ) , FecLimiteSolCot = formato.format( assetRegional.getFecLimiteSolCot( ) ) , FecLimReqCompra = formato.format( assetRegional.getFecLimReqCompra( ) ) , FecLimSubeCont = formato.format( assetRegional.getFecLimSubeCont( ) ) ,
                                    FecLimPrimFact = formato.format( assetRegional.getFecLimPrimFact( ) ) , FecConfSede = formato.format( assetRegional.getFecConfSede( ) ) , FecFinCamp = formato.format( assetRegional.getFecFinCamp( ) ) , FecLimSegFact = formato.format( assetRegional.getFecLimSegFact( ) ) , FecLimAgenda = formato.format( assetRegional.getFecLimAgenda( ) ) ,
                                    FecLimGanadores = formato.format( assetRegional.getFecLimGanadores( ) ) , FecLimBoletos = formato.format( assetRegional.getFecLimBoletos( ) ) , FecSalida = formato.format( assetRegional.getFecSalida( ) ) , FecRegreso = formato.format( assetRegional.getFecRegreso( ) ) , FecEva = formato.format( assetRegional.getFecEva() ) ,
                                    assetRegional.getFechasConfirmadas( ), 1, assetRegional.getTblFlujo1( ).getCveFlujo( ), assetRegional.getTblFlujo2( ).getCveFlujo( ), assetRegional.getTipoMoneda( ),
                                    assetRegional.getTipoHabitacion( ), cvePaisS[ i ], assetRegional.getTblAgencia( ).getCveAgencia( ), assetRegional.getTblFlujoAutorizacion( ).getCveFlujoAut( ) ) ;
                            }
                            
                        } else
                            if( tblAssetPaisRegional.isEmpty( ) ) {// si la lista de Relacion de Assets esta vacia crea el asset
                            
                            assetPais = MasterCardDAO.addNewAssetByRegional(assetRegional.getTblSubcateg( ).getCveSubcateg( ), assetRegional.getNombre( ), null,
                                    assetRegional.getCostoSenLoc( ), assetRegional.getCostoDobLoc( ), assetRegional.getCostoSenReg( ), assetRegional.getCostoDobReg( ), Fecha = formato.format( assetRegional.getFecha( ) ),
                                    FecEntregaBc = formato.format( assetRegional.getFecEntregaBc( ) ) , FecAprobBc = formato.format( assetRegional.getFecAprobBc( ) ) , FecLimiteSolCot = formato.format( assetRegional.getFecLimiteSolCot( ) ) , FecLimReqCompra = formato.format( assetRegional.getFecLimReqCompra( ) ) , FecLimSubeCont = formato.format( assetRegional.getFecLimSubeCont( ) ) ,
                                    FecLimPrimFact = formato.format( assetRegional.getFecLimPrimFact( ) ) , FecConfSede = formato.format( assetRegional.getFecConfSede( ) ) , FecFinCamp = formato.format( assetRegional.getFecFinCamp( ) ) , FecLimSegFact = formato.format( assetRegional.getFecLimSegFact( ) ) , FecLimAgenda = formato.format( assetRegional.getFecLimAgenda( ) ) ,
                                    FecLimGanadores = formato.format( assetRegional.getFecLimGanadores( ) ) , FecLimBoletos = formato.format( assetRegional.getFecLimBoletos( ) ) , FecSalida = formato.format( assetRegional.getFecSalida( ) ) , FecRegreso = formato.format( assetRegional.getFecRegreso( ) ) , FecEva = formato.format( assetRegional.getFecEva() ) ,
                                    assetRegional.getFechasConfirmadas( ), 1, assetRegional.getTblFlujo1( ).getCveFlujo( ), assetRegional.getTblFlujo2( ).getCveFlujo( ), assetRegional.getTipoMoneda( ),
                                    assetRegional.getTipoHabitacion( ), cvePaisS[ i ], assetRegional.getTblAgencia( ).getCveAgencia( ), assetRegional.getTblFlujoAutorizacion( ).getCveFlujoAut( ) ) ;
                        }                     
                        
                        // AGREGA LOS PAQUETES SENCILLOS AL ASSET DEL PAIS
                        boolean agregaPaquetes = MasterCardDAO.addNewPackagesAndUpdateRegional( assetPais , manejarPaquetesS[ i ] , 1 , 2 , 2 , assetRegional ) ;
                        // LANZA LAS NOTIFICACIONES CORRESPONDIENTES
                        NotificationUtil.NotificacionParaPais( manejarPaquetesS[ i ] , assetPais , 1 , cvePaisS[ i ] ) ;
                        
                    }else
                            if( manejarPaquetesS[ i ] < 0 ) {
                                // SI manejarPaquetesS ES MENOR QUE 0, ENTONCES VA A REGRESAR PAQUETES
                                // CREA LISTA DE PAQUETES SENCILLOS ASIGNADOS A PAIS Y DISPONIBLES EN PAIS
                                // CREA LISTA CON LOS PAQUETES EXACTOS QUE VA A REGRESAR
                                List< TblPaqueteRegional > paqAsignadosS =
                                        MasterCardDAO.PaquetesRegionalesPorAssetStatusBanderaYHabitacion( assetRegional.getCveAsset( ) , 1 , 2 , 1 , cvePaisS[ i ] ) ,
                                        paqParaRegresarS = new ArrayList< TblPaqueteRegional >( ) ;
                                
                                int totalregresarD = manejarPaquetesS[ i ] ;
                                // lo convierte a positivo
                                totalregresarD *= -1 ;
                                for( TblPaqueteRegional pSad : paqAsignadosS ) {
                                    // recorre la lista de los paquetes asignados y disponibles, los agrega al arreglo con los
                                    // paquetes que ha de regresar hasta que el tamaño coincide con el total a regresar.
                                    if( paqParaRegresarS.size( ) < totalregresarD ) {
                                        paqParaRegresarS.add( pSad ) ;
                                    } else if ( paqParaRegresarS.size( ) == totalregresarD ) {
                                        break ;
                                    }
                                    
                                }
                                
                                // regresa los paquetes.
                                boolean regresaPaqS = MasterCardDAO.regionalRegresaPaquetes( paqParaRegresarS ) ; 
                                
                            }
                    }
                    }
                    
                    // NUEVAMENTE Busca EL O LOS REGISTROS EN LA TABLA DE RELACION DE ASSETREGIONAL-ASSETPAIS POR ID DE ASSETREGIONAL
                       // YA QUE PUDO PRODUCIRCE ALGNA ACTUALIZACION
                    tblAssetPaisRegional = MasterCardDAO.getLista( f.getCveAsset( ) ) ;
                    MasterCardDAO.closeEntityManager( ) ;
                    
                    if( manejarPaquetesD != null ){
                    // rrecorre los arreglos para paquetes DOBLES
                    for( int j = 0 ; j < cvePaisD.length ; j++ ) {                        
                                                
                        // SI LA VARIABLE manejarPaquetesS EN LA POSICION i ES MAYOR QUE CERO, APLICA EL PROCESO
                        if( manejarPaquetesD[ j ] > 0  ) {
                        
                        if( !tblAssetPaisRegional.isEmpty( ) ) {
                            
                            int flag = 0 ; // BANDERA PARA SABER SI YA EXSTE UN ASSET PARA EL PAIS
                            //BARRE TODOS LOS REGISTROS DE LA RELACION DE ASSETREGIONAL CON ASSETPAIS
                            for( TblAssetPaisRegional APR : tblAssetPaisRegional ) {    
                                
                                // SI ENCUENTRA EL REGISTRO CAMBIA LA BANDERA Y TOMA EL ASSET
                                TblAsset assetPaisRelacion = MasterCardDAO.findAssetById( APR.getIdAssetPais( ) ) ;
                                if( assetPaisRelacion.getTblPais( ).getCvePais( ) == cvePaisD[ j ] ){
                                    assetPais = MasterCardDAO.findAssetById( APR.getIdAssetPais() ) ;
                                    flag = 1 ;
                                }
                                    
                            }
                            
                            if( flag == 0 ) {
                                //EN CASO DE NO ENCONTRAR EL REGISTRO
                                // CREA EL ASSET
                                assetPais = MasterCardDAO.addNewAssetByRegional(assetRegional.getTblSubcateg( ).getCveSubcateg( ), assetRegional.getNombre( ), null,
                                    assetRegional.getCostoSenLoc( ), assetRegional.getCostoDobLoc( ), assetRegional.getCostoSenReg( ), assetRegional.getCostoDobReg( ), Fecha = formato.format( assetRegional.getFecha( ) ),
                                    FecEntregaBc = formato.format( assetRegional.getFecEntregaBc( ) ) , FecAprobBc = formato.format( assetRegional.getFecAprobBc( ) ) , FecLimiteSolCot = formato.format( assetRegional.getFecLimiteSolCot( ) ) , FecLimReqCompra = formato.format( assetRegional.getFecLimReqCompra( ) ) , FecLimSubeCont = formato.format( assetRegional.getFecLimSubeCont( ) ) ,
                                    FecLimPrimFact = formato.format( assetRegional.getFecLimPrimFact( ) ) , FecConfSede = formato.format( assetRegional.getFecConfSede( ) ) , FecFinCamp = formato.format( assetRegional.getFecFinCamp( ) ) , FecLimSegFact = formato.format( assetRegional.getFecLimSegFact( ) ) , FecLimAgenda = formato.format( assetRegional.getFecLimAgenda( ) ) ,
                                    FecLimGanadores = formato.format( assetRegional.getFecLimGanadores( ) ) , FecLimBoletos = formato.format( assetRegional.getFecLimBoletos( ) ) , FecSalida = formato.format( assetRegional.getFecSalida( ) ) , FecRegreso = formato.format( assetRegional.getFecRegreso( ) ) , FecEva = formato.format( assetRegional.getFecEva() ) ,
                                    assetRegional.getFechasConfirmadas( ), 1, assetRegional.getTblFlujo1( ).getCveFlujo( ), assetRegional.getTblFlujo2( ).getCveFlujo( ), assetRegional.getTipoMoneda( ),
                                    assetRegional.getTipoHabitacion( ), cvePaisS[ j ], assetRegional.getTblAgencia( ).getCveAgencia( ), assetRegional.getTblFlujoAutorizacion( ).getCveFlujoAut( ) ) ;
                            }
                            
                        } else
                            if( tblAssetPaisRegional.isEmpty( ) ) {// si la lista de Relacion de Assets esta vacia crea el asset
                            
                            assetPais = MasterCardDAO.addNewAssetByRegional(assetRegional.getTblSubcateg( ).getCveSubcateg( ), assetRegional.getNombre( ), null,
                                    assetRegional.getCostoSenLoc( ), assetRegional.getCostoDobLoc( ), assetRegional.getCostoSenReg( ), assetRegional.getCostoDobReg( ), Fecha = formato.format( assetRegional.getFecha( ) ),
                                    FecEntregaBc = formato.format( assetRegional.getFecEntregaBc( ) ) , FecAprobBc = formato.format( assetRegional.getFecAprobBc( ) ) , FecLimiteSolCot = formato.format( assetRegional.getFecLimiteSolCot( ) ) , FecLimReqCompra = formato.format( assetRegional.getFecLimReqCompra( ) ) , FecLimSubeCont = formato.format( assetRegional.getFecLimSubeCont( ) ) ,
                                    FecLimPrimFact = formato.format( assetRegional.getFecLimPrimFact( ) ) , FecConfSede = formato.format( assetRegional.getFecConfSede( ) ) , FecFinCamp = formato.format( assetRegional.getFecFinCamp( ) ) , FecLimSegFact = formato.format( assetRegional.getFecLimSegFact( ) ) , FecLimAgenda = formato.format( assetRegional.getFecLimAgenda( ) ) ,
                                    FecLimGanadores = formato.format( assetRegional.getFecLimGanadores( ) ) , FecLimBoletos = formato.format( assetRegional.getFecLimBoletos( ) ) , FecSalida = formato.format( assetRegional.getFecSalida( ) ) , FecRegreso = formato.format( assetRegional.getFecRegreso( ) ) , FecEva = formato.format( assetRegional.getFecEva() ) ,
                                    assetRegional.getFechasConfirmadas( ), 1, assetRegional.getTblFlujo1( ).getCveFlujo( ), assetRegional.getTblFlujo2( ).getCveFlujo( ), assetRegional.getTipoMoneda( ),
                                    assetRegional.getTipoHabitacion( ), cvePaisS[ j ], assetRegional.getTblAgencia( ).getCveAgencia( ), assetRegional.getTblFlujoAutorizacion( ).getCveFlujoAut( ) ) ;
                        }                     
                        
                        // AGREGA LOS PAQUETES DOBLES AL ASSET DEL PAIS
                        boolean agregaPaquetes = MasterCardDAO.addNewPackagesAndUpdateRegional( assetPais , manejarPaquetesD[ j ] , 2 , 2 , 2 , assetRegional ) ;
                         // LANZA LAS NOTIFICACIONES CORRESPONDIENTES
                        NotificationUtil.NotificacionParaPais( manejarPaquetesD[ j ] , assetPais , 2 , cvePaisD[ j ] ) ;
                        
                    } else
                            if( manejarPaquetesD[ j ] < 0 ) {
                                // SI manejarPaquetesS ES MENOR QUE 0, ENTONCES VA A REGRESAR PAQUETES
                                // CREA LISTA DE PAQUETES SENCILLOS ASIGNADOS A PAIS Y DISPONIBLES EN PAIS
                                // CREA LISTA CON LOS PAQUETES EXACTOS QUE VA A REGRESAR
                                List< TblPaqueteRegional > paqAsignadosD =
                                        MasterCardDAO.PaquetesRegionalesPorAssetStatusBanderaYHabitacion( assetRegional.getCveAsset( ) , 1 , 2 , 2 , cvePaisD[j] ) ,
                                        paqParaRegresarD = new ArrayList< TblPaqueteRegional >( ) ;
                                MasterCardDAO.closeEntityManager( ) ;
                                
                                int totalregresarD = manejarPaquetesD[ j ] ;
                                // lo convierte a positivo
                                totalregresarD *= -1 ;
                                for( TblPaqueteRegional pDad : paqAsignadosD ) {
                                    // recorre la lista de los paquetes asignados y disponibles, los agrega al arreglo con los
                                    // paquetes que ha de regresar hasta que el tamaño coincide con el total a regresar.
                                    if( paqParaRegresarD.size( ) < totalregresarD ) {
                                        paqParaRegresarD.add( pDad ) ;
                                    } else if ( paqParaRegresarD.size( ) == totalregresarD ) {
                                        break ;
                                    }
                                    
                                }
                                
                                // regresa los paquetes.
                                boolean regresaPaqD = MasterCardDAO.regionalRegresaPaquetes( paqParaRegresarD ) ;
                                MasterCardDAO.closeEntityManager( ) ;
                                
                            }
                    }
                    }
                    
                    
//                    request.setAttribute( "ItemFinded", assetRegional ) ;
                    
                    
                    
                    
                    // INICIA PROCESO PARA LLENAR EL FOR  Y MOSTRAR PANTALLA
                    int paquetes = 0 , asignados = 0 , disponibles = 0,
                            Stotales = 0, Sdisponibles = 0, Sasignados = 0,
                            Dtotales = 0, Ddisponibles = 0, Dasignados = 0 ;
                    
                    TblAsset asset = MasterCardDAO.findAssetById( f.getCveAsset( ) ) ;
                    MasterCardDAO.closeEntityManager( ) ;
                    f.setTblAsset( asset ) ;
                    f.setCveAsset( asset.getCveAsset( ) ) ;
                    
                    List< TblPaqueteRegional > lpr = MasterCardDAO.getAllPackagesRegionalOfAsset( f.getTblAsset( ).getCveAsset( ) , 1 ) ;
                    MasterCardDAO.closeEntityManager( ) ;
                    List< TblPaises > lp = MasterCardDAO.getPaisesExceptoUno( ) ;
                    MasterCardDAO.closeEntityManager( ) ;
                    f.setTblPaises( lp ) ;
                                        
                    int[] cvePais = new int[lpr.size()] ;
                    String[] nombrePais = new String[lpr.size()] ;
                    paquetesAsignadosS = new int[lpr.size()] ;
                    paquetesAsignadosD = new int[lpr.size()] ;
//                    int[] manejarPaquetes = new int[lpr.size()] ;
                    
                    int[] cvePaisSF = new int[lp.size()] ;
                    String[] nombrePaisSF = new String[lp.size()] ;
                    int[] paquetesAsignadosSF = new int[lp.size()] ;                    
                    int[] manejarPaquetesSF = new int[lp.size()] ;
                    
                    int[] cvePaisDF = new int[lp.size()] ;
                    String[] nombrePaisDF = new String[lp.size()] ;
                    int[] paquetesAsignadosDF = new int[lp.size()] ;
                    int[] manejarPaquetesDF = new int[lp.size()] ;
                    
                    //RECORRE CADA PAQUETE REGIONAL DEL ASSET
                    for( TblPaqueteRegional pR : lpr ) {
                        // Conteo de paquetes totales del Asset
                        if( pR.getBandera( ) == 1 ) {
                            disponibles += 1 ; 
                        } else if ( pR.getBandera( ) == 2 ) {
                            asignados += 1 ;
                        }
                        TblPaquete paq = MasterCardDAO.getPackageWhitCveAndStatus( pR.getPaquete( ) ) ;
                        MasterCardDAO.closeEntityManager( ) ;
                        // Conteo por tipo de Habitación
                        if( pR.getHabitacion( ) == 1 ) {
                            // Cuenta total, asignados y disponibles
                            if( pR.getBandera( ) == 1 ) {
                                Sdisponibles += 1 ;
                            }else if( pR.getBandera( ) == 2 ) {
                                Sasignados += 1 ;
                                cvePais[paquetes] = paq.getTblAsset( ).getTblPais( ).getCvePais( ) ;
                                nombrePais[paquetes] = paq.getTblAsset( ).getTblPais( ).getNombre( ) ;
                                paquetesAsignadosS[paquetes] = 1 ;
                            }
                            Stotales += 1 ;
                            
                        } else if( pR.getHabitacion( ) == 2 ) {
                            // Cuenta total, asignados y disponibles
                            if( pR.getBandera( ) == 1 ) {
                                Ddisponibles += 1 ;
                            }else if( pR.getBandera( ) == 2 ) {
                                Dasignados += 1 ;
                                cvePais[paquetes] = paq.getTblAsset( ).getTblPais( ).getCvePais( ) ;
                                nombrePais[paquetes] = paq.getTblAsset( ).getTblPais( ).getNombre( ) ;
                                paquetesAsignadosD[paquetes] = 1 ;
                            }
                            Dtotales += 1 ;
                        }
                        
                        paquetes += 1 ;
                        
                    }
                   
                    int cuenta = 0 ;
                    for( TblPaises pais : lp ) {
                        
                        cvePaisSF[cuenta] = pais.getCvePais() ; nombrePaisSF[cuenta] = pais.getNombre( ) ;
                        paquetesAsignadosSF[cuenta] = 0 ; manejarPaquetesSF[cuenta] = 0 ;
                        
                        cvePaisDF[cuenta] = pais.getCvePais() ; nombrePaisDF[cuenta] = pais.getNombre( ) ;
                        paquetesAsignadosDF[cuenta] = 0 ; manejarPaquetesDF[cuenta] = 0 ;
                        
                        for( int i = 0 ; i < cvePais.length ; i++ ) {
                            
                            if( pais.getCvePais( ) == cvePais[i] ) {
                                
                                if( paquetesAsignadosS[i] == 1 ) {
                                    paquetesAsignadosSF[cuenta] += 1 ;
                                }else
                                    if( paquetesAsignadosD[i] == 1 ) {
                                        paquetesAsignadosDF[cuenta] += 1 ;
                                    }                                
                            }
                        }
                        cuenta ++ ;
                    }
                                        
                    f.setCvePaisS( cvePaisSF ) ;
                    f.setNombrePaisS( nombrePaisSF ) ;
                    f.setPaquetesAsignadosS( paquetesAsignadosSF ) ;                    
                    f.setManejarPaquetesS( manejarPaquetesSF ) ;
                    f.setCvePaisD( cvePaisDF ) ;
                    f.setNombrePaisD( nombrePaisDF ) ;
                    f.setPaquetesAsignadosD( paquetesAsignadosDF ) ;
                    f.setManejarPaquetesD( manejarPaquetesDF ) ;
                    
                    request.setAttribute( "AssetAsignarPaquetesRegionalForm" , f ) ;
                    request.setAttribute( "UserLogin" , user ) ;
                    request.setAttribute( "paquetes" , paquetes ) ;
                    request.setAttribute( "asignados" , asignados ) ;
                    request.setAttribute( "disponibles" , disponibles ) ;
                    request.setAttribute( "Stotales" , Stotales ) ;
                    request.setAttribute( "Sdisponibles" , Sdisponibles ) ;
                    request.setAttribute( "Sasignados" , Sasignados ) ;
                    request.setAttribute( "Dtotales" , Dtotales ) ;
                    request.setAttribute( "Ddisponibles" , Ddisponibles ) ;
                    request.setAttribute( "Dasignados" , Dasignados ) ;
                    
                    user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioRegional.jsp" ) ;
                    
                    }else
                        if( operacion == 2 ) {
                            // siguiente area
                            user.setNextWorkArea( "/AssetsEditarIn.do?cveAsset=" + f.getCveAsset( ) ) ;
                        }else 
                            if( operacion == 3 ) {
                                // siguiente area
				user.setNextWorkArea( "/AssetsDetalleIn.do?cveAsset=" + f.getCveAsset( ) ) ;
                            }else
                                if( operacion == 4 ) {
                                    user.setNextWorkArea( "/AssetsRegional.do" ) ;
                                }else
                                    if( operacion == 5 ) {
                                        user.setNextWorkArea( "/AssetsModificarPaquetesIn.do?cveAsset=" + f.getCveAsset( ) ) ;
                                    }

                    
                }catch( Exception e )
		{
                    MasterCardDAO.closeEntityManager( ) ;
			e.printStackTrace( ) ;
			user.setMessageError( e.getMessage( ) ) ;
		}
                                
		MasterCardDAO.closeEntityManager( ) ;
	  	return mapping.findForward( "success" ) ;
    }
    
}
